package cn.iocoder.yudao.module.member.convert.auth;

import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserUnbindReqVO;
import cn.iocoder.yudao.module.system.api.oauth2.dto.Oauth2AccessTokenRespDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO;
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
 * 身份验证转换
 *
 * @author huangweidong
 * @date 2023/05/09
 */
@Mapper
public interface AuthConvert {

    AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class);

    /**
     * 转换
     *
     * @param userId   用户id
     * @param userType 用户类型
     * @param reqVO    请求VO
     * @return {@code SocialUserBindReqDTO}
     */
    SocialUserBindReqDTO convert(Long userId, Integer userType, AppAuthSocialLoginReqVO reqVO);

    /**
     * 转换
     *
     * @param userId   用户id
     * @param userType 用户类型
     * @param reqVO    请求VO
     * @return {@code SocialUserUnbindReqDTO}
     */
    SocialUserUnbindReqDTO convert(Long userId, Integer userType, AppSocialUserUnbindReqVO reqVO);

    /**
     * 转换
     *
     * @param reqVO 请求VO
     * @return {@code SmsCodeSendReqDTO}
     */
    SmsCodeSendReqDTO convert(AppAuthSmsSendReqVO reqVO);

    /**
     * 转换
     *
     * @param reqVO  请求VO
     * @param scene  场景
     * @param usedIp 使用ip
     * @return {@code SmsCodeUseReqDTO}
     */
    SmsCodeUseReqDTO convert(AppAuthResetPasswordReqVO reqVO, SmsSceneEnum scene, String usedIp);

    /**
     * 转换
     *
     * @param reqVO  请求VO
     * @param scene  场景
     * @param usedIp 使用ip
     * @return {@code SmsCodeUseReqDTO}
     */
    SmsCodeUseReqDTO convert(AppAuthSmsLoginReqVO reqVO, Integer scene, String usedIp);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code AppAuthLoginRespVO}
     */
    AppAuthLoginRespVO convert(Oauth2AccessTokenRespDTO bean);

}
